Jump to content

Recommended Posts

Posted

I finally found a rss reader I understand I think.

It works when I try the downloaded "default" code, but not when I replace the url I want to get news from (http://expressen.se/rss/nyheter'>http://expressen.se/rss/nyheter).

When I replace the default url I get this error:

Warning: fopen(http://expressen.se/rss/nyheter ): failed to open stream: HTTP request failed! HTTP/1.0 404 in /home/cpanelusername/public_html/test/index.html on line 649

could not open XML input

 

Does anyone know why?

 

Here is the original code

><?php
/*  PHP RSS Reader v1.1
   By Richard James Kendall 
   Bugs to richard@richardjameskendall.com 
   Free to use, please acknowledge me 
   
   Place the URL of an RSS feed in the $file variable.
   
   The $rss_channel array will be filled with data from the feed,
   every RSS feed is different by by and large it should contain:
   
   Array {
  	 [TITLE] = feed title
  	 [DESCRIPTION] = feed description
  	 [LINK] = link to their website
  	 
  	 [IMAGE] = Array {
       [URL] = url of image
       [DESCRIPTION] = alt text of image
    	 }
  	 
  	 [ITEMS] = Array {
       [0] = Array {
         [TITLE] = item title
         [DESCRIPTION] = item description
         [LINK = a link to the story
      	 }
       .
       .
       .
    	 }
   }
   
   By default it retrives the Reuters Oddly Enough RSS feed. The data is put into the array
   structure so you can format the information as you see fit.
*/
set_time_limit(0);

$file = "http://slashdot.org/index.rss";

$rss_channel = array();
$currently_writing = "";
$main = "";
$item_counter = 0;

function startElement($parser, $name, $attrs) {
   global $rss_channel, $currently_writing, $main;
   switch($name) {
  	 case "RSS":
  	 case "RDF:RDF":
  	 case "ITEMS":
     $currently_writing = "";
     break;
  	 case "CHANNEL":
     $main = "CHANNEL";
     break;
  	 case "IMAGE":
     $main = "IMAGE";
     $rss_channel["IMAGE"] = array();
     break;
  	 case "ITEM":
     $main = "ITEMS";
     break;
  	 default:
     $currently_writing = $name;
     break;
   }
}

function endElement($parser, $name) {
   global $rss_channel, $currently_writing, $item_counter;
   $currently_writing = "";
   if ($name == "ITEM") {
  	 $item_counter++;
   }
}

function characterData($parser, $data) {
global $rss_channel, $currently_writing, $main, $item_counter;
if ($currently_writing != "") {
 switch($main) {
	 case "CHANNEL":
   if (isset($rss_channel[$currently_writing])) {
  	 $rss_channel[$currently_writing] .= $data;
   } else {
  	 $rss_channel[$currently_writing] = $data;
   }
   break;
	 case "IMAGE":
   if (isset($rss_channel[$main][$currently_writing])) {
  	 $rss_channel[$main][$currently_writing] .= $data;
   } else {
  	 $rss_channel[$main][$currently_writing] = $data;
   }
   break;
	 case "ITEMS":
   if (isset($rss_channel[$main][$item_counter][$currently_writing])) {
  	 $rss_channel[$main][$item_counter][$currently_writing] .= $data;
   } else {
  	 //print ("rss_channel[$main][$item_counter][$currently_writing] = $data<br>");
  	 $rss_channel[$main][$item_counter][$currently_writing] = $data;
   }
   break;
 }
}
}

$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
if (!($fp = fopen($file, "r"))) {
die("could not open XML input");
}

while ($data = fread($fp, 4096)) {
if (!xml_parse($xml_parser, $data, feof($fp))) {
 die(sprintf("XML error: %s at line %d",
  	 xml_error_string(xml_get_error_code($xml_parser)),
  	 xml_get_current_line_number($xml_parser)));
}
}
xml_parser_free($xml_parser);

// output as HTML
print ("<html><head><title>PHP RSS Reader</title></head><body>");
if (isset($rss_channel["IMAGE"])) {
print ("<a href=\"" . $rss_channel["LINK"] . "\" target=\"_blank\"><img border=\"0\" src=\"" . $rss_channel["IMAGE"]["URL"] . "\" align=\"middle\" alt=\"" . $rss_channel["IMAGE"]["TITLE"] . "\"></a>  <font size=\"5\">" . $rss_channel["TITLE"] . "</font><br><br>");
} else {
print ("<font size=\"5\">" . $rss_channel["TITLE"] . "</font><br><br>");
}
print ("<i>" . $rss_channel["DESCRIPTION"] . "</i><br><br>");
if (isset($rss_channel["ITEMS"])) {
if (count($rss_channel["ITEMS"]) > 0) {
 for($i = 0;$i < count($rss_channel["ITEMS"]);$i++) {
	 print ("\n<table width=\"100%\" border=\"1\"><tr><td width=\"100%\"><a href=\"" . $rss_channel["ITEMS"][$i]["LINK"] . "\" target=\"_blank\"><h2>" . $rss_channel["ITEMS"][$i]["TITLE"] . "</h2></a></b>");
	 print ("<i>" . html_entity_decode($rss_channel["ITEMS"][$i]["DESCRIPTION"]) . "</i>");
	 print ("</td></tr></table><br>");
 }
} else {
 print ("<b>There are no articles in this feed.</b>");
}
}
print ("</body></html>");
?>

Posted

Hi Thomas.

 

I was going to tell you to try again, because what you were getting was a "404 page not found" error but then I tried accessing the URL and it was working.

 

As for your other question, see that "// output as HTML" line, near the bottom of the script? You can edit the HTML code you see after that to make the page look as you want.

Posted

Well, here's a few tips:

change the <h2> into <h3> to make the text smaller. Or simply remove it if you want it to be the same size of the rest of the text.

If you really want to control the size, try replacing the <h2> with <span style='font-size: 1em;'>

Don't forget to close those tags!

 

About the borders around the items, it's simple, just replace

border=\"1\"

with

style='border: 0;'

 

Let me know if it does the trick :P

Posted

h stands for heading, it's semantic markup and can be used for accessibility purposes. But basically it means "heading 1", "heading 2" etc. That's why the heading 1 is bigger and generally gets smaller - but you can style this using css if you want =)

Posted

What errors did it return?

And how did you duplicate the code? It should be as easy as copying the whole block, pasting it below the one already there and changing the URL.

Posted

I just copied it all, replaced the url and got this mesage:

>Fatal error: Cannot redeclare startelement() (previously declared in /home/jikrant/public_html/test/rsstest.htm:72) in /home/jikrant/public_html/test/rsstest.htm on line 226

Posted

I feel really stupid... :huh:

Those are functions, so of course you can't duplicate them :unsure:

 

Try this:

Just before the line

 

$xml_parser = xml_parser_create();

 

Put the new RSS feed URL. Something like

 

$file = "http://newsiteorg/feed.rss";

 

After that, duplicate all the code, starting from the line I mentioned before (including that line) to the end of the code.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...